using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._CartographyTools._MapSeries
{
    /// <summary>
    /// <para>Calculate Central Meridian And Parallels</para>
    /// <para>Calculates the central meridian and optional standard parallels based on the center point of a feature's extent; stores this coordinate system as a spatial reference string in a specified text field; and repeats this for a set, or subset, of features. This field can be used with a spatial map series  to update the data frame coordinate system for each page.</para>
    /// <para>根据要素范围的中心点计算中央子午线和可选标准纬线;将此坐标系作为空间参考字符串存储在指定的文本字段中;并对一组或一组特征重复此操作。此字段可与空间地图系列一起使用，以更新每个页面的数据框坐标系。</para>
    /// </summary>    
    [DisplayName("Calculate Central Meridian And Parallels")]
    public class CalculateCentralMeridianAndParallels : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public CalculateCentralMeridianAndParallels()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_features">
        /// <para>Input Features</para>
        /// <para>The input feature layer.</para>
        /// <para>输入要素图层。</para>
        /// </param>
        /// <param name="_in_field">
        /// <para>Coordinate System Field</para>
        /// <para>The text field where the coordinate system string will be stored.</para>
        /// <para>将存储坐标系字符串的文本字段。</para>
        /// </param>
        public CalculateCentralMeridianAndParallels(object _in_features, object _in_field)
        {
            this._in_features = _in_features;
            this._in_field = _in_field;
        }
        public override string ToolboxName => "Cartography Tools";

        public override string ToolName => "Calculate Central Meridian And Parallels";

        public override string CallName => "cartography.CalculateCentralMeridianAndParallels";

        public override List<string> AcceptEnvironments => ["workspace"];

        public override object[] ParameterInfo => [_in_features, _in_field, _standard_offset, _out_features];

        /// <summary>
        /// <para>Input Features</para>
        /// <para>The input feature layer.</para>
        /// <para>输入要素图层。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_features { get; set; }


        /// <summary>
        /// <para>Coordinate System Field</para>
        /// <para>The text field where the coordinate system string will be stored.</para>
        /// <para>将存储坐标系字符串的文本字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Coordinate System Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_field { get; set; }


        /// <summary>
        /// <para>Standard Parallel Offset</para>
        /// <para>The percentage of the height of the input feature used to offset the standard parallels from the center latitude of the input feature. The default is 25 percent or 0.25. Negative values and values greater than 1 are acceptable inputs.</para>
        /// <para>用于偏移标准纬线与输入要素中心纬度的输入要素高度的百分比。默认值为 25% 或 0.25。负值和大于 1 的值是可接受的输入。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Standard Parallel Offset")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _standard_offset { get; set; } = 0.25;


        /// <summary>
        /// <para>Output Features</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Features")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_features { get; set; }


        public CalculateCentralMeridianAndParallels SetEnv(object workspace = null)
        {
            base.SetEnv(workspace: workspace);
            return this;
        }

    }

}